package club.hicode.daydayup.proxy.valid;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * 验证的代理对象
 *
 * @author Liu Chunfu
 * @date 2018-05-03 上午10:45
 **/
public class ValidProxy implements InvocationHandler {

    private Object taregt;

    public ValidProxy(Object target) {
        this.taregt = target;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        //代理的东西
        ValidAspect aspect = new ValidAspect();
        //此处直接返回
        boolean valid = aspect.valid(args);
        if (!valid) {
            return null;
        }
        //原生的东西
        Object invoke = method.invoke(taregt, args);
        return invoke;
    }

    /**
     * 生成代理对象。
     * 一定是通过 proxy来代理的
     */
    public ICompute getProxy() {
        return (ICompute) Proxy.newProxyInstance(this.getClass().getClassLoader(), new Class[]{ICompute.class}, this::invoke);
    }
}
